package com.example.viewmodel_lifecycle_livedata

import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider

/**
2.viewmodel数据存储到哪里？
viewmodelStore—》HashMap<String,ViewModel>
先去viewmodelStore根据键判断是否有值，有返回对应的viewmodel，若没有使工厂创建viewmodel并放在viewmodelStore
3.viewmodel生命周期？
App进程结束，viewmodel数据销毁
4.viewmodel如何创建？
(1)by viewmodels()
(2)by activityViewmodels()
(3)viewmodelProvider().get(class对象)
5.by viewmodels() 和 viewmodelProvider().get(class对象)有什么区别？
(1)by viewmodels() 底层还是用的viewmodelProvider
(2)by viewmodels() 懒加载，使用的时候才会创建，不使用永远不创建
6.by viewmodels() 和 by activityViewmodels()在fragment中有什么区别？
(1)by viewmodels() ：不能和其他fragment共享数据
(2)by activityViewmodels()：和其他fragment共享数据,获取同一个acvitivty的viewmodel
7.activity配置信息改变，为什么viewmodel数据不会变？
(1)在activity中当配置信息发生改变比如横竖屏切换创建销毁，将viewmodelStore存储NonConfigurationInstances
(2)当页面重新创建后，从NonConfigurationInstances拿出viewmodelStore并恢复数据
 */
class MainActivity : AppCompatActivity() {
    private var count = 0
    private lateinit var viewmodel:MyViewModel
    private val viewmodel2:MyViewModel by viewModels() //委托创建viewmodel,懒：使用的时候才会创建，不使用永远不创建
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        viewmodel = ViewModelProvider(this)[MyViewModel::class.java] //永远创建viewmodel

    }

    fun add(view: View) {
        viewmodel.add()
        count++
        Log.d("MainActivity", "add1: "+viewmodel.count)
        Log.d("MainActivity", "add2: "+count)
    }
}